/*
 * @Description:
 * @Author: cgt
 * @Date: 2021-12-23 14:05:56
 * @LastEditors: cgt
 * @LastEditTime: 2021-12-28 19:12:26
 */
/**
 * @module utils/Geojson2WktUtil
 * @desc Geojson格式转WKT格式工具
 */


/**
 * 转换点坐标
 * @param {coordinates} coordinates 坐标
 * @ignore
 */
function parsePoint(coordinates) {
  return `Point(${coordinates.join(' ')})`;
}

/**
 * 转换线坐标
 * @param {coordinates} coordinates 坐标
 * @ignore
 */
function parseLineString(coordinates) {
  return `LineString(${coordinates.map((item) => item.join(' ')).join(',')})`;
}

/**
 * 转换面坐标
 * @param {coordinates} coordinates 坐标
 * @ignore
 */
function parsePolygon(coordinates) {
  return `Polygon(${coordinates
    .map((temp1) => '(' + temp1.map((item) => item.join(' ')).join(',') + ')')
    .join(',')})`;
}

/**
 * 转换组合线坐标
 * @param {coordinates} coordinates 坐标
 * @ignore
 */
function parseMultiLineString(coordinates) {
  return `MultiLineString(${coordinates
    .map((temp1) => '(' + temp1.map((item) => item.join(' ')).join(',') + ')')
    .join(',')})`;
}

/**
 * 转换组合多边形坐标
 * @param {coordinates} coordinates 坐标
 * @ignore
 */
function parseMultiPolygon(coordinates) {
  return `MultiPolygon(${coordinates
    .map((temp1) => '(' + temp1.map((item) => '(' + item.map((temp2) => temp2.join(' ')).join(',') + ')').join(',') + ')')
    .join(',')})`;
}

/**
 * Geojson格式转WKT格式
 * @param {Object} geojson
 */
export function parse(geojson) {
  if (!geojson) {
    console.error('参数不正确', geojson);
    return null;
  }
  let {
    type,
    coordinates
  } = geojson;
  let result = null;
  let fnameMapping = {
    Point: parsePoint,
    LineString: parseLineString,
    Polygon: parsePolygon,
    MultiLineString: parseMultiLineString,
    MultiPolygon: parseMultiPolygon
  };
  if (fnameMapping[type]) {
    result = fnameMapping[type](coordinates);
  } else {
    console.log('未知类型', type);
  }
  return result;
}